/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ita.escolaita.view;

import br.ita.escolaita.ejb.FuncionarioEjbLocal;
import br.ita.escolaita.model.entity.Funcionario;
import br.ita.escolaita.model.entity.Professor;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;

/**
 *
 * @author rafaelbrizola
 */
public class FuncionarioBean {

    @EJB
    private FuncionarioEjbLocal funcionarioEjb;
    private List<Funcionario> funcionarios;
    private String cpfSelecionado;
    private Funcionario funcionario;

    // Construtor default
    public FuncionarioBean() {
    }

    public String salvar() {
        String retorno = null;

        try {
            if (funcionario.getCargo().equals("Professor")) {
                Professor professor = new Professor();
                professor.setId(funcionario.getId());
                professor.setNome(funcionario.getNome());
                professor.setSexo(funcionario.getSexo());
                professor.setDataNascimento(funcionario.getDataNascimento());
                professor.setLogradouro(funcionario.getLogradouro());
                professor.setNumero(funcionario.getNumero());
                professor.setCep(funcionario.getCep());
                professor.setComplemento(funcionario.getComplemento());
                professor.setBairro(funcionario.getBairro());
                professor.setCidade(funcionario.getCidade());
                professor.setUf(funcionario.getUf());
                professor.setCpf(funcionario.getCpf());
                professor.setCargo("Professor");
                professor.setFoneCelular(funcionario.getFoneCelular());
                professor.setFoneResidencial(funcionario.getFoneResidencial());
                professor.setSalario(funcionario.getSalario());
                funcionarioEjb.salvar(professor);
            } else {
                funcionarioEjb.salvar(funcionario);
            }

            funcionario = new Funcionario();
            retorno = "sucesso";
        } catch (Exception e) {
            e.printStackTrace();
            retorno = "erro";
        }

        return retorno;
    }

    public String voltar() {
        HttpSession ses = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        ses.removeAttribute("funcionarioBean");
        ses.removeAttribute("funcionario");
        return "voltar";
    }

    public String pesquisar() {
        String retorno = null;
        try {
            funcionarios = funcionarioEjb.listar(funcionario);
            retorno = "sucesso";
        } catch (Exception e) {
            e.printStackTrace();
            retorno = "erro";
        }

        return retorno;
    }

    public List<Funcionario> todosFuncionarios() {
        try {
            funcionarios = funcionarioEjb.listarTodos();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return funcionarios;
    }

    public void desativarListener(ActionEvent event) {
        UIParameter component = (UIParameter) event.getComponent().findComponent("funcionarioDesativar");
        funcionario = (Funcionario) component.getValue();
    }

    public void alterarListener(ActionEvent event) {
        UIParameter component = (UIParameter) event.getComponent().findComponent("funcionarioAlterar");
        funcionario = (Funcionario) component.getValue();
    }

    public String selecionar() {
        String retorno = "";
        if (cpfSelecionado != null) {
            for (Funcionario f : funcionarios) {
                if (f.getCpf().equals(cpfSelecionado)) {
                    funcionario = f;
                    break;
                }
            }
            retorno = "selecionar";
        }
        return retorno;
    }

    public String alterar() {
        return "alterar";
    }

    public String salvarAlteracao() {
        funcionarioEjb.alterar(funcionario);
        funcionario = new Funcionario();
        return "sucesso";
    }

    public void selecionarListener(ActionEvent event) {
        UIParameter component = (UIParameter) event.getComponent().findComponent("funcionarioDesativar");
        if (component == null) {
            component = (UIParameter) event.getComponent().findComponent("funcionarioAtivar");
        }
        if (component == null) {
            component = (UIParameter) event.getComponent().findComponent("funcionarioAlterar");
        }
        if (component != null) {
            funcionario = (Funcionario) component.getValue();
        }
    }

    public void desativar() {
        funcionario.setStatus('I');
        funcionarioEjb.alterar(funcionario);
        funcionario = new Funcionario();
    }

    public void ativar() {
        funcionario.setStatus('A');
        funcionarioEjb.alterar(funcionario);
        funcionario = new Funcionario();
    }

    public List<SelectItem> getListaProfessores() {
        List<Professor> todosProfessores = funcionarioEjb.listarTodosProfessores();
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (Professor p : todosProfessores) {
            SelectItem item = new SelectItem(p, p.getNome());
            itens.add(item);
        }
        return itens;
    }

    /**
     * @return the funcionarios
     */
    public List<Funcionario> getFuncionarios() {
        return funcionarios;
    }

    /**
     * @param funcionarios the funcionarios to set
     */
    public void setFuncionarios(List<Funcionario> funcionarios) {
        this.funcionarios = funcionarios;
    }

    public FuncionarioEjbLocal getFuncionarioEjb() {
        return funcionarioEjb;
    }

    public void setFuncionarioEjb(FuncionarioEjbLocal funcionarioEjb) {
        this.funcionarioEjb = funcionarioEjb;
    }

    /**
     * @return the funcionario
     */
    public Funcionario getFuncionario() {
        return funcionario;
    }

    /**
     * @param funcionario the funcionario to set
     */
    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public static void main(String[] args) {
        Professor prof = new Professor();
        System.out.println("prof:" + prof);
    }
}
